Virtual Address for Virtual Port

ABSTRACT

A device to detect storage devices coupled to the device in response to receiving a query from a switch, include the storage devices in logical units, create virtual ports for the logical units, assign virtual addresses for the virtual ports, and send a response with the virtual addresses to switch.

BACKGROUND

A SAS (serial attached SCSI—small computer system interface) protocolnetwork can include multiple storage clients and array systems coupledto one another through one or more SAS switches. A SAS switch can accessphysical ports on the array systems. By accessing the physical port, theSAS switch can interface with a PHY (physical) port and discover alogical unit associated with the physical port.

Through the PHY ports, the array systems identify themselves to beexpander devices capable of zoning. The SAS switch can additionallyidentify addresses for each of the PHY ports. Each physical port caninclude a single address utilized by the switch and other devices on theSAS network to identify a location of the PHY port and a logical unitassociated with the PHY port.

The SAS switch can include the addresses of the PHY ports in an addresstable and proceed to manage access to the PHY ports of the logical unitsthrough a process called logical unit masking. Logical unit masking is aprocess where the SAS switch masks or hides an address of a PHY portassociated with a logical unit in the address table. The SAS switchshares the address table, including the masked addresses, with storageclients coupled to the SAS switch and the storage clients use theaddress table to identify addresses of PHY ports which are available tothe corresponding storage client to access.

To support logical unit masking, the array systems included in the SASnetwork fabric employ a common network protocol which utilizes the PHYports. This can lead to costly overhead for the SAS switch, the storageclients and the expander devices. Additionally, maintenance for thenetwork can be increased due to the large infrastructure and increasedpoints of failures which may be present from relying on multiple PHYports on multiple devices on the SAS network.

BRIEF DESCRIPTION OF THE DRAWINGS

Various features and advantages of the disclosed embodiments will beapparent from the detailed description which follows, taken inconjunction with the accompanying drawings, which together illustrate,by way of example, features of the disclosed embodiments.

FIG. 1 illustrates a device according to an embodiment.

FIG. 2 illustrates a device coupled to a switch according to anembodiment.

FIG. 3A illustrates a block diagram of an array application assigningstorage devices to logical units according to an embodiment.

FIG. 3B illustrates a block diagram of an array application creatingvirtual ports for logical units and virtual addresses for the virtualports according to an embodiment.

FIG. 4A illustrates a block diagram of an array application sending aresponse to a switch according to an embodiment.

FIG. 4B illustrates a switch discovering logical units of a device inresponse to receiving a response from a device according to anembodiment.

FIG. 5 illustrates a switch updating a zoning table and controllingaccess permission in response to discovering logical units of a deviceaccording to an embodiment.

FIG. 6 is a flow chart illustrating a method for communicating with aswitch according to an embodiment.

FIG. 7 is a flow chart illustrating a method for communicating with aswitch according to another embodiment.

DETAILED DESCRIPTION

By detecting a query from a switch, the device can respond by detectingstorage devices coupled to the device and assign the storage devices tological units of the device. As a result, the logical units canefficiently be created and allocated on demand. Additionally, bycreating virtual ports for the logical units and assigning virtualaddresses to the virtual ports, the switch can be notified that thedevice is an expander device capable of zoning. As a result, the switchcan proceed to discover the logical units as physical devices throughtheir corresponding virtual address and virtual port. By creatingvirtual ports and virtual addresses for the logical units, an amount ofinfrastructure can be reduced by not requiring physical ports.Additionally, an amount of maintenance for the network can be reduced byusing virtual as opposed to physical ports.

FIG. 1 illustrates a device 100 according to an embodiment. In oneembodiment, the device 100 is a disk storage system, such as an arraysystem. The array system can be a NAS (network attached storage) deviceor a SAN (storage area network) device. In another embodiment, thedevice 100 is a server, a desktop, a laptop, a notebook, a tablet, anetbook, an all-in-one system, and/or any additional device which can becoupled to one or more storage devices 140.

The device 100 includes a controller 120, an interface component 130, acommunication component 150, at least one storage device 140, at leastone logical unit 180, and a communication channel 105 for the device 100and/or one or more components of the device 100 to communicate with oneanother. In one embodiment, the device 100 can include an arrayapplication stored on a computer readable memory coupled to the device100. In other embodiments, the device 100 includes additional componentsin addition to and/or in lieu of those noted above and illustrated inFIG. 1.

As noted above, the device 100 includes a controller 120. The controller120 can send data and/or instructions to the interface component 130,the communication component 150, the array application, a logical unit180, and/or any storage device 140 coupled to the device 100. Thecontroller 120 can also receive data and/or instructions from theinterface component 130, the communication component 150, the arrayapplication, the logical unit 180, and/or any storage device 140 coupledto the device 100.

The array application is an application which can be utilized inconjunction with the controller 120 to manage the device 100 andcommunication between the device 100 and a switch coupled to the device100. The array application can be software executable from a tangible,non-transitory computer readable memory of the device 100. In anotherembodiment, the array application is firmware that is embedded into oneor more components of the device 100 as ROM. In other embodiments, thearray application is an application which is stored and accessed from ahard drive, a compact disc, a flash disk, a network drive or any otherform of computer readable medium that is coupled to the device 100. Thearray application can communicate with components coupled to the device100 physically or wirelessly through a communication bus 105 included inor attached to the device 100. The communication bus 105 can be a memorybus and/or a data bus.

When managing the device 100, a communication component 150 of thedevice 100 can initially detect a query 105 from the switch. Thecommunication component 150 is a hardware component configured tointerface the device 100 with the switch and receive and/or send databetween the device 100 with the switch. The switch is a network deviceconfigured to couple the device 100 to one or more storage clientsand/or servers in a network. In one embodiment, the switch can be aserial attached SCSI (small computer system interface) switch. The query105 can be a request for the device 100 to provide information to theswitch. For example, the query 105 can instruct the controller 120and/or the array application to provide a number of logical units 180coupled to the device 100 and an address for each of the logical units180.

In response to detecting the query, the array application and/or thecontroller 120 application can proceed to detect one or more storagedevices 140 coupled to the device 100. When detecting storage devices140, the array application and/or the controller 120 can determinewhether any storage devices 140 are coupled to an interface component130 of the device 100. The interface component 130 can be a hardwarecomponent configured to couple and interface a storage device 140 withthe controller 120 and/or the array application. One or more storagedevices 140 can be an internal storage device, an external storagedevice, and/or a remote storage device coupled to the interfacecomponent 130.

In response to detecting storage devices 140, the array applicationand/or the controller 120 can assign the storage devices 140 to one ormore logical units 180. For the purposes of this application, a logicalunit 180 can be a physical or virtual device with a predefined volume.Storage of one or more of the storage devices 140 can be allocated bythe controller 120 and/or the array application to create the volume ofa logical unit 180. Once the storage devices 140 have been included orassigned to the logical units 180, the array application and/or thecontroller 120 can proceed to create virtual ports 185 for each of thelogical units 180.

For the purposes of this application, a virtual port 185 can be anon-physical socket which can mimic the functionality of a PHY(physical) port. The virtual port 185 can be created and assigned to acorresponding logical unit 180. The controller 120 and/or the arrayapplication can additionally create and assign a virtual address to thevirtual port 185. The virtual address can be an artificial address usedby the switch and any server connected to the switch to locate andaccess the virtual port 185 of a corresponding logical unit 180. Thecontroller 120 and/or the array application can create virtual ports 185and assign virtual addresses for each of the logical units 180 of thedevice 100.

Once the virtual ports 180 and the virtual addresses have been assignedfor each of the logical units 180, the array application and/or thecontroller 120 can proceed to send the switch a response listing each ofthe virtual addresses corresponding to the virtual ports 185 of thelogical units 180. The controller 120 and/or the array application canadditionally manage communication between the logical units 180 and theswitch and/or other devices coupled to the switch through the virtualports 185 if any request for information and/or data is received.

FIG. 2 illustrates a device 200 coupled to a switch 260 according to anembodiment. As noted above, the switch 260 is a network device, such asa SAS (serial attached SCSI) switch, which couples the device 200 to oneor more endpoints. As shown in FIG. 2, an endpoint can be a storageclient 270 and/or server coupled to the switch 260. For the purposes ofthis application, a storage client 270 is a device which can access oneor more logical units accessible to the switch 260. In one embodiment,the storage client 270 can be an initiator and/or a target within thenetwork.

Additionally, as shown in FIG. 2, the switch 260 can transmit a query255 to a communication component 250 of the device 200. The query 255can be a request, sent by the switch 260, as a file, a message, and/orany additional form of data which the communication component 250 canreceive. In one embodiment, the query 255 can be request for the device200 to identify addresses of any ports couples to a logical unit of thedevice 200.

The communication component 250 is a hardware component configured tointerface the device 200 with the switch 260 and send and/or receivedata between the device 200 and the switch 260. In one embodiment, thecommunication component 250 can be a SAS port and/or a network interfacecomponent. In another embodiment, the communication component 250 can bea Bluetooth component, a radio component, an infra-red component, and/orany additional hardware configured to send and/or receive data betweenthe device 200 and the switch 260.

In response to receiving the query 255, the array application 210 and/orthe controller 220 can proceed to detect one or more storage devices 240coupled to the device 200. A storage device 240 can be any device orcomponent which can read, write, and/or store data. In one embodiment, astorage device 240 can be non-volatile memory, such as a hard discdrive, magnetic media, optical media, and/or flash memory. As shown inFIG. 2, one or more storage device 240 can be local storage devices 240which are internally or externally coupled to an interface component 230of the device 200.

In one embodiment, the interface component 230 can be a SCSI (smallcomputer system interface) port, a SATA (serial advanced technologyattachment) port, an external SATA port, a PCI (peripheral componentinterconnect) port, a PCI express port, an IDE (integrated driveelectronics) port, a USB (universal serial bus) port, a SD (serialdevice) port, a compact flash port, and/or a XD (extreme digital) port.In another embodiment, the interface component 230 can be a networkinterface and one or more storage devices 240 can be remotely coupled todevice 200 through the interface component 230. In other embodiments,the interface component 230 can be any additional port or componentwhich can interface with an internal, external, or remote storage device240.

As shown in FIG. 2, the array application 210 and/or the arraycontroller 220 have detected the interface component 230 to be coupledto 6 storage devices. Storage device 1 and storage device 2 are detectedto be internally coupled to the device 200. Additionally, storage device3 and storage device 5 have been detected to be externally coupled tothe device 200. Further, storage device 4 and storage device 6 have beendetected to be remotely coupled to the device 200.

FIG. 3A illustrates a block diagram of an array application 310assigning storage devices 340 to logical units 380 according to anembodiment. As noted above, a logical unit 380 can be a physical orvirtual device created with storage from one or more storage devices 340(Storage Device 1, Storage Device 2, Storage Device 3, Storage Device 4,Storage Device 5, and Storage Device 6). A logical unit 380 can have apredefined volume or storage capacity. The predefined storage capacitycan be defined by the controller 320, the array application 310, aswitch coupled to the device, and/or a storage client coupled to theswitch.

As shown in FIG. 3, the controller 320 and/or the array application 310determine that Logical Unit 1 has a predefined storage capacity of A,Logical Unit 2 has a predefined storage capacity of B, Logical Unit 3has a predefined storage capacity of C, and Logical Unit 4 has apredefined storage capacity of D. The controller 320 and/or the arrayapplication 310 proceed to access the storage devices and determinesthat storage of Storage Device 1 and Storage Device 4 when combined formstorage capacity A, Storage Device 2 has a storage capacity of B,Storage Device 3 and Storage Device 6 when combined form storagecapacity C, and Storage Device 5 has a storage capacity D.

In response, as shown in the present embodiment, the controller 320and/or the array application 310 proceed to allocate the storagecapacity of Storage Device 1 and Storage Device 4 to Logical Unit 1,allocate the storage capacity of Storage Device 2 to Logical Unit 2,allocate the storage capacity of Storage Device 3 and Storage Device 6to Logical Unit 3, and allocate the storage capacity of Storage Deviceto Logical Unit 4. The controller 320 and/or the array application 310can additionally manage each of the logical units.

In another embodiment, the controller 320 and/or the array application310 can additionally create logical unit controllers and/or logical unitapplications for each logical unit. The logical unit controllers and/orapplications can manage the logical units and the controller 320 and/orthe array application 310 can rout any communication from a switch oranother device to the corresponding logical unit controller and/orapplication.

FIG. 3B illustrates a block diagram of an array application 310 creatingvirtual ports 385 for logical units 380 and virtual addresses for thevirtual ports 385 according to an embodiment. A virtual port 385 can bea software emulation of a PHY (physical) port which is associated ordesignated for a logical unit 380. In one embodiment, the virtual port385 can support the SAS protocol and mimics the functionality of aphysical SAS port.

The controller 320 and/or the array application 310 can create a virtualport 385 by identifying an unused COM (communication) port of thedevice. The controller 320 and/or the array application 310 can thenreserve the COM port as a virtual port 385. Any communication sentand/or received through the virtual port 380 can be routed through thereserved COM port to a corresponding logical unit 380. In anotherembodiment, the controller 320 and/or the array application 310 can useone or more virtualizers, hypervisors, and/or emulators to create avirtual port 385. In other embodiments, the controller 320 and/or thearray application 310 can create a virtual port 385 using any additionalmethod in addition to and/or in lieu of those noted above.

The controller 320 and/or the array application 310 can mimic signalprocessing and/or transmission for the virtual port 385. When mimickingthe signal processing and/or transmission, the controller 320 and/or thearray application 310 can manage send and/or receive functions for thevirtual port 385. The array application 310 and/or the controller 320create virtual ports 385 for each of the logical units 380 of thedevice. As shown in FIG. 3B, the controller 320 and/or the arrayapplication 310 create Virtual Port 1 for Logical Unit 1, Virtual Port 2for Logical Unit 2, Virtual Port 3 for Logical Unit 3, and Virtual Port4 for Logical Unit 4. By creating virtual ports 385 for the logicalunits 380, the controller 320 and/or the array application 310 canpresent the logical units 380 as physical SAS storage devices to beincluded in the SAS network.

Once the virtual ports 385 have been created for the logical units 380,the controller 320 and/or the array application 310 proceed to assignvirtual addresses for each of the virtual ports 385. For the purposes ofthis application, a virtual address is an artificial address or uniqueidentifier which is associated with a virtual port 385 of a logical unit380. In one embodiment, the virtual address can be a virtual SASaddress. In another embodiment, the virtual address can be an internetprotocol address. One or more of the virtual addresses can be randomlygenerated by the controller 320 and/or the array application 310. Inanother embodiments, a user of the device, the controller 320, and/orthe array application 310 can define one or more virtual addresses.

In one embodiment, the controller 320 and/or the array application 310can additionally create a file, a list, and/or report which includesinformation of the logical units 380. The information can specify whichvirtual port 385 is associated with the corresponding logical unit 380.Additionally, the information can list the virtual address associatedwith the virtual port 385.

FIG. 4A illustrates a block diagram of an array application 410 sendinga response 490 to a switch 460 according to an embodiment. The response490 can be generated by the controller 420 and/or the array application410 as a file and/or message. Additionally, as shown in the presentembodiment, the response 490 can list information of the device. In oneembodiment, the response 490 can list each logical unit included on thedevice, each virtual port associated with each logical unit, and eachvirtual address assigned to each virtual port.

In another embodiment, the report 490 can additionally include a messageindicating to the switch 460 that the device is an expander devicecapable of zoning. By presenting the device as an expander devicecapable of zoning, the switch 460 can attempt to discover the logicalunits of the device as SAS devices which can be included in the SASfabric. Once the response 490 has been generated, the controller 420and/or the array application 410 can instruct the communicationcomponent 450 to transmit the response 490 to the switch 460.

FIG. 4B illustrates a switch 460 discovering logical units of a devicein response to receiving a response 490 from the device according to anembodiment. In one embodiment, as shown in FIG. 4B, the response 490specifies that the device 400 is an expander device capable of zoning.Because the device 400 is identified to support zoning, the switch 460determines that the device 400 supports a SAS protocol.

In response to determining that the device is an expander device the,the switch 460 uses the information listed within the report 490 todetermine that logical units are included on the device. As noted above,the report 490 lists that the device includes Logical Unit 1, LogicalUnit 2, Logical Unit 3, and Logical Unit 4. Additionally, the report 490lists Virtual Address 1 to be assigned to Virtual Port 1 of Logical Unit1, Virtual Address 2 to be assigned to Virtual Port 2 of Logical Unit 2,Virtual Address 3 to be assigned to Virtual Port 3 of Logical Unit 3,and Virtual Address 4 to be assigned to Virtual Port 4 of Logical Unit4.

Because the device was identified by the switch 460 to be an expanderdevice, the switch 460 assumes that the virtual ports of the logicalunits are physical ports. Additionally, the switch 460 assumes that thevirtual addresses are addresses to the physical ports of the logicalunits.

As a result, the switch 460 attempts to discover Logical Unit 1, LogicalUnit 2, Logical Unit 3, and Logical Unit 4 through their correspondingvirtual ports and virtual addresses. In one embodiment, when discoveringthe logical units, the switch 460 can send the communication component450 of the device a discover query or request. The discover query orrequest can be sent as a filed, a message, and/or as signal.

In response to detecting the discover query or request from the switch460, the controller 420 and/or the array application 410 proceed todetermine which logical unit of the device the switch 460 is attemptingto discover. In one embodiment, the switch 460 initially attempts todiscover Logical Unit 1 with Virtual Address 1. The controller 420and/or the array application 410 detect that Virtual Address 1 is beingaccessed and determine that Virtual Address 1 is assigned to VirtualPort 1 of Logical Unit 1.

In response, the controller 420 and/or the array application 410 mimicthe functionality of the physical (PHY) port. As noted above, whenmimicking the signal processing and/or transmission, the controller 420and/or the array application 410 can manage sending and/or receivingfunctions, instructions, and/or data for the virtual port associatedwith the Virtual Address.

In one embodiment, the controller 420 and/or the array application 410can determine which of the virtual addresses the switch 460 is using fordiscover. The controller 420 and/or the array application 410 can thenidentify a corresponding Virtual Port associated with the virtualaddress. A logical unit associated with the virtual port can then beidentified and the controller 420 and/or the array application 410 canreport to the switch 460 information of the logical unit.

In another embodiment, the controller 420 and/or the array application410 rout the discovery query through Virtual Port 1 over to Logical Unit1. Routing the discovery query includes the controller 420 and/or thearray application 410 routing the discovery query though a COM portpreviously reserved for Virtual Port 1. In response to receiving thediscovery query, Logical Unit 1 provides a response that it includes astorage Capacity of A. The controller 420 and/or the array application410 can additionally rout this information back through Virtual Port 1and then instruct the communication component 450 to send a response ofthis information from Logical Unit 1 to the switch 460.

The controller 420 and/or the array application 410 can repeat one ormore of the methods noted above for each logical unit of the device theswitch 460 attempts to discover. Additionally, the switch 460 candiscover each of the logical units of the device sequentially and/or inparallel.

FIG. 5 illustrates a switch 560 updating a zoning table 565 andcontrolling access permissions in response to discovering logical unitsof a device 500 according to an embodiment. The zoning table 565 can bea file, list, and/or database which includes information of the network.In one embodiment, the zoning table 565 includes information of the SASnetwork.

As shown in FIG. 5, in one embodiment, the zoning table 565 includes alist of logical units detected within the SAS network. In oneembodiment, the switch 560 has already detected Logical Unit 5, LogicalUnit 6, Logical Unit 7, and Logical Unit 8 to be on other devices withinthe SAS network. Additionally, the zoning table 565 lists addresses forports corresponding to the logical units and lists access permissions tothe logical units within the SAS network. Further, the address table 565lists each device included in the SAS network, Storage Client 1, StorageClient 2, Storage Client 3, and Storage Client 4.

As noted above, the switch 560 has successfully discovered Logical Unit1, Logical Unit 2, Logical Unit 3, and Logical Unit 4 on the device 500through their corresponding virtual ports and virtual addresses. Inresponse, the switch 560 proceeds to update or modify the zoning table565 to include the information of the logical units from the device 500.As shown in the present embodiment, the switch 560 updates the zoningtable 565 to list Logical Unit 1, Logical Unit 2, Logical Unit 3, andLogical Unit 4 from the device 500. Further, the switch 560 updates thezoning table 565 to list the Virtual Addresses for each of the logicalunits from the device 500.

Once the zoning table 565 has been updated to include the logical unitsfrom the device 500, the switch 560 can control or manage accesspermissions to the logical units by marking the zoning table 565 to maskor block access to one or more logical unit by one or more deviceswithin the network. By masking or blocking access, a PHY (physical) portof a corresponding logical unit cannot be accessed by a device which hasbeen marked to block.

As shown in FIG. 5, the address table 465 lists that Storage Client 1can access each of the logical units except Logical Unit 1.Additionally, Storage Client 2 cannot access Logical Unit 3 and LogicalUnit 8. Further, Storage Client 3 cannot access Logical Unit 1, LogicalUnit 4, and Logical Unit 7. In addition, Storage Client 4 cannot accessLogical Unit 5 and Logical Unit 6. The switch 560 can share the addresstable 565 with access permissions with other devices coupled to theswitch 560. Using the address table 565, the other devices, such asstorage clients, can know which logical units within the network theycan access through corresponding addresses of the logical units.

FIG. 6 is a flow chart illustrating a method for communicating with aswitch according to an embodiment. The method of FIG. 6 uses a portabledevice with a controller, a communication component, an interfacecomponent, at least one storage device, a logical unit, a communicationchannel, and/or an array application. In other embodiments, the methodof FIG. 6 uses additional components and/or devices in addition toand/or in lieu of those noted above and illustrated in FIGS. 1, 2, 3, 4,and 5.

As noted above, the device can be coupled to a switch through acommunication component and receive a query from the switch. In responseto detecting the query from the communication component, the controllerand/or the array application can proceed to detect any storage devicescoupled to an interface component of the device 600. Additionally, thecontroller and/or the array application can assign the storage devicesto one or more logical units of the device.

As noted above, the storage devices are assigned to the logical unitsbased on corresponding volumes of the logical units. Once the storagedevices have been assigned to the logical units, the controller and/orthe array application can create virtual ports for the logical units610. As noted above, the controller and/or the array application mimicthe functionality of physical (PHY) ports with the virtual ports bymimicking signal processing and/or transmission for the virtual port. Inone embodiment, the controller and/or the array application additionallyreserve an unused COM port of the device and assign the unused COM portto the virtual port.

The controller and/or the array application can create virtual ports foreach of the logical units. Once the virtual ports have been created, thecontroller and/or the array application can assign each of the virtualports a virtual address and send a response with the virtual addressesto the switch 620. As noted above, the virtual address can be a SASaddress generated by the controller, the array application, and/or auser of the device. Additionally, the report can be a file, a signal,and/or message which includes the virtual address of each of the virtualports of the device.

Using the addresses from the report, the switch can attempt to discoverthe logical units on the device. The switch can assume that the virtualaddresses are real address associated with physical ports. As a result,the switch attempts to discover the logical units to include as part ofthe network. The switch can additionally control access permission forthe logical units of the device.

The switch can implement a zoning feature within the network by updatinga zoning table to include the address of the logical units and markingwhich devices. Additionally, the switch can mark the zoning table to notallow devices, such as storage clients, coupled to the switch fromaccessing one or more of the logical units. The method is then complete.In other embodiments, the method of FIG. 6 includes additional steps inaddition to and/or in lieu of those depicted in FIG. 6.

FIG. 7 is a flow chart illustrating a method for communicating with aswitch according to another embodiment. Similar to the method above, themethod of FIG. 7 uses a portable device with a controller, acommunication component, an interface component, at least one storagedevice, a logical unit, a communication channel, and/or an arrayapplication. In other embodiments, the method of FIG. 7 uses additionalcomponents and/or devices in addition to and/or in lieu of those notedabove and illustrated in FIGS. 1, 2, 3, 4, and 5.

As noted above, the device can be an array system. The controller and/orthe array application of the array system can initially use thecommunication component to detect whether a query has been received froma switch 700. If not query has been detected, the controller and/or thearray application can continue to detect for the query 700. If a queryhas been detected. The controller and/or the array application candetect storage devices coupled to the device through an interfacecomponent of the device 710.

Once all of the storage devices have been detected, the controllerand/or the array application can proceed to assign the storage devicesto logical units based on corresponding volumes of the logical units720. A number of logical units for the device and/or a capacity of thelogical units can be predefined by the controller, and/or the arrayapplication. In response to the storage devices being assigned to thelogical units, the controller and/or the array application can proceedto create virtual ports for the logical units and assign virtualaddresses for each virtual port 730.

As noted above, the virtual ports are software emulations of physical(PHY) ports. When creating the virtual ports, the controller and/or thearray application can mimic the functionality of a physical (PHY) portfor sending and/or receiving information. Additionally, the controllerand/or the array application can generate virtual addresses and assignthem to each virtual port. As noted above, the virtual addresses can beSAS addresses.

The controller and/or the array application can then include the virtualaddresses of the virtual ports in a report to transmit to the switch. Asnoted above, the switch can use the report to collect information of thedevice, such as number of logical units and/or an address of portsassociated with the logical units. Additionally, the switch can use theinformation in the report to discover the logical units on the device.In one embodiment, when discovering the logical units, the switch cansend a discovery query or request.

If the controller and/or the array application detect the discoveryquery or request, the controller and/or the array application can detectwhich virtual address the switch is using to discover a logical unit.Based on the virtual address, the controller and/or the arrayapplication can identify a virtual port associated with the virtualaddress 760. The controller and/or the array application can thenidentify the corresponding logical unit the switch is attempting todiscover.

Once the logical unit to be discovered has been identified, thecontroller and/or the array application can mimic the functionality ofthe logical unit and provide a response through the virtual port back tothe switch. In one embodiment, the controller and/or the arrayapplication identify to the switch that the logical unit is a physicaldevice coupled to the device 770.

In another embodiment, the logical unit can include a logical unitcontroller and/or logical unit application which can communicate withthe controller and/or array application. The controller and/or the arrayapplication can rout any communication from the switch over to thelogical unit controller and/or logical unit application. Additionally,the controller and/or the array application can rout any communicationfrom the logical unit controller and/or the logical unit applicationback to the switch.

Once the logical units have been discovered by the switch, the switchcan edit or update a zoning table to include the logical units of thedevice. Additionally, the switch can control access permission to thelogical units through zoning. The switch can mark on the zoning table,devices which cannot access the virtual ports of the logical units, andshare the zoning table with other devices coupled to the switch. Themethod is then complete. In other embodiments, the method of FIG. 7includes additional steps in addition to and/or in lieu of thosedepicted in FIG. 7.

1. A method for communicating with a switch comprising: detectingstorage devices coupled to a device in response to receiving a queryfrom a switch coupled to the device; including the storage devices inlogical units based on corresponding volumes of the logical units andcreating virtual ports for the logical units; and assigning virtualaddresses for the virtual ports and sending a response from the devicethat includes the virtual addresses to the switch.
 2. The method forcommunicating with a switch of claim 1 wherein the response from thedevice identifies that the device is an expander device capable ofzoning.
 3. The method for communicating with a switch of claim 1 furthercomprising receiving a discovery request from the switch.
 4. The methodfor communicating with a switch of claim 3 further comprisingidentifying a corresponding logical unit to be discovered based on anaddress requested from the switch.
 5. The method for communicating witha switch of claim 4 wherein identifying the corresponding logical unitincludes identifying which virtual port the requested address isassociated with and which corresponding logical unit is associated withthe virtual port.
 6. The method for communicating with a switch of claim5 further comprising identifying to the switch that the correspondinglogical unit is a physical device coupled to the device.
 7. The methodfor communicating with a switch of claim 1 wherein the switch updates anaddress table with the virtual addresses of the virtual ports.
 8. Themethod for communicating with a switch of claim 1 wherein the switchuses the virtual addresses of the virtual ports to control accesspermissions of the logical units of the device.
 9. The method forcommunicating with a switch of claim 8 wherein the switch shares theaccess permissions with other devices coupled to the switch and otherdevices can use the access permissions to identify which logical unitsof the device can be accessed.
 10. A device comprising: a communicationcomponent to couple the device with a switch and receive a query fromthe switch; an interface component to couple the device to at least onestorage device; and a controller to assign the at least one storagedevice to logical units and create virtual ports for the logical unitsin response to receiving the query; wherein the controller in additioncreates virtual addresses for the virtual ports and sends a responsewith the virtual addresses to the switch.
 11. The device of claim 10wherein the device is an array system.
 12. The device of claim 10wherein the switch is a serial attached SCSI (small computer systeminterface switch).
 13. The device of claim 10 wherein the interfacecomponent includes at least one of a small computer system interfaceport, an serial advanced technology attachment port, an external serialadvanced technology attachment port, a peripheral component interconnectport, a peripheral component interconnect express port, an integrateddrive electronics port, universal serial bus port, a serial device port,a compact flash port, and an extreme digital port.
 14. The device ofclaim 10 wherein at least one of the storage device are physicallycoupled to the device through the interface component.
 15. The device ofclaim 10 wherein the interface component is a network interfacecomponent.
 16. The device of claim 15 wherein at least one of thestorage device are remotely coupled to the device through the interfacecomponent.
 17. A computer readable medium comprising instructions thatif executed cause a controller to: discover storage devices coupled to adevice in response to detecting a query from a switch coupled to thedevice; assign the storage devices to logical units of the device basedon corresponding volumes of the logical units and create virtual portsfor the logical units; and assign virtual addresses for the virtualports and send a response to the switch with the virtual addresses. 18.The computer readable medium comprising instructions of claim 17 whereinthe switch accesses the virtual ports with the virtual addresses. 19.The computer readable medium comprising instructions of claim 17 whereinthe switch discovers the logical units of the device as serial attachedSCSI devices through the virtual ports.
 20. The computer readable mediumcomprising instructions of claim 17 wherein a number of logical unitscreated by the controller and the corresponding volume of the logicalunits can be defined by at least one of the controller, a storageclient, and the switch.